
define([
    'Util',
    'list',
    'text!tpl/module/editModule.tpl',
    'select',
    'form',
    'jquery',
    'dialog',
    'validator',
    'loading',
    '../common/getPath',
    'comboSelect',
    'cookie'
], function(Util, List, tpl, Select, Form, $, Dialog, Validator, Loading, AjaxPath, ComboSelect, $cookie) {
    var select;
    //系统变量-定义该模块的根节点
    var $el = null;
    //系统变量-构造函数
    var _indexModule = null,
        list = null,
        valiform = null,
        tabParent = null,
        editModuleData = null,
        loadingConfig=null,
        handLoading=null,
        editModuleValidator = null,
        excuterSelect = null,
        config = null,
        dialog = null,
        modEdiActiveLogList = null,
        editMdoMomeValidor = null;
    var initialize = function(indexModule, options, tabItem) {
        $el = $(tpl);
        _indexModule = indexModule;
        //事件--点击切换tab后事件回调
        $(tabItem).on("tabActive", function() {
            console.log('common example')
            tabItem.show(true); //刷新表单
        });
        //页面传递变量，勿删！
        editModuleData = options;
        tabParent = tabItem;
        createLoading();
       /* //业务相关代码
        TabInit();*/
        //将根节点赋值给接口
        eventInit();
        formInit();
        this.content = $el;
        inSelect();
        ModuleEditValidation();
        forbidEnterEdiModule();
        crtEdiModActlogList();
    };

    //业务代码-事件初始化
    var eventInit = function() {
        $el.on('click', '.btnSave', saveModuleEditValidation);
        $el.on('click', '.btnBack', back);
        // $el.on('click', '.btnNodeBack', back);
        $el.on('click', '.btnModuleReset', resetFun);
        $el.on('click', '.t-list-title .triEdiModule', changeTriEdiModule);
        $el.on('click', '.editModuleLogTab li', actModEdiLogChange);
        $el.on('click', '.editModuleAddMome', createModMomeDialog);
    };
    var forbidEnterEdiModule = function() {
        $("input[name='moduleName']", $el).on('keypress',function(e){
            if(e.keyCode === 13){
                e.preventDefault();
                return false;
            }
        });
    }
    var resetFun = function() {
        $("input[name='moduleName']", $el).val(editModuleData.moduleName);
        excuterSelect.setValue(0);
        $("textarea[name='moduleDscription']", $el).val("");
    }

    var back = function() {
        tabParent.switchTab(editModuleData.menuId);
        tabParent.destroy('editModuleTab');
    }

    var formInit = function() {
        Util.ajax.getJson(AjaxPath.project+"/modules/"+editModuleData.id, {}, function(result, isok) {
            if(result.returnCode === "0000"){
                $("input[name='moduleName']", $el).val(editModuleData.moduleName);
                $("textarea[name='moduleDscription']", $el).val(result.beans.moduleDscription);
                // $("textarea[name='remark']", $el).val(editProjectdata.remark);
                // $("select[name='state']", $el).val(editProjectdata.state);
            }else {
                new Dialog({
                    // mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                    title:'提示',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                    modal:true,
                    content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                });
            }
        });
    }

    var switchTab = function(index) {
        $(".t-tabs-items li", $el).eq(index).trigger('click');
    }

    var inSelect = function() {
        //负责人
        Util.ajax.getJson(AjaxPath.project + "/dropdown?modual=require&type=tryPeople&systemId=" + editModuleData.refProject, {}, function(result, isok){
            /*excuterSelect = new Select({
                el:$("#excuter", $el),       //要绑定的容器
                ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                    method:'GET'
                }, 
                label:'<i style="color:red;padding:2px;">*</i>负责人:', //下拉框单元左侧label文本，可不配置
                selectText:false,       //是否显示  ‘选择|清除’  模式
                name:'excuter',    //下拉框单元右侧下拉框名称
                disabled:false,     //组件是否被禁用
                topOption:"请选择", //设置最顶部option的text属性
                value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                valueField:"key",//设置下拉框value，填写数据中对应的字段名
                datas: result.beans,         //数据源
                loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                dataReady:function(){
                    console.log("获取负责人"); 
                } //select的DOM结构加载完后执行
                //  url:'../data/select.json'  //数据源，不建议使用，后期将会移除
            });*/
            if(result.returnCode === "0000"){
                for(var i =0;i<result.beans.length;i++){
                    result.beans[i].name =  result.beans[i].value;
                    result.beans[i].value = result.beans[i].key;
                }
                result.beans.unshift({
                    "id":"0",
                    "name":"请选择",
                    "value":""
                })
                result.beans = JSON.parse(JSON.stringify(result.beans));
            }
            excuterSelect = new ComboSelect({
                el:$("#excuter", $el),       //要绑定的容器
                name:'excuter',    //下拉框单元添加name属性
                checked:'0', 
                loadAtClick:false,
                // url:'../data/select.json',  //数据源，不建议使用，后期将会移除
                datas: result.beans         //数据源与url模式可二选一
            });
            $("#excuter input[name='comboInput']").attr("placeholder", "请选择");
            for(var i = 0;i < result.beans.length; i++ ){
                if(result.beans[i].key === editModuleData.excuter){
                    excuterSelect.setValue(""+editModuleData.excuter);
                    return true;
                }
            }
            $("#oTip").html(editModuleData.userName+"已经不属于该项目，请重新选择！");
            excuterSelect.setValue("0");
        })
        
    }

    var ModuleEditValidation = function(checked) {
        var config = {
            // el: $('.validatorForm'),
            el: $(".detailModuleEditForm", $el),
            submitBtn: $(".btnSave"), //触发验证的按钮，可不配置
            dialog: true, //是否弹出验证结果对话框
            rules: {
                moduleName: "required",
                excuter: "required",
            },
            messages: {
                moduleName: {
                    required: "模块名称不能为空！"
                },
                excuter: {
                    required: "请选择负责人！"
                }
            }
        };  
        editModuleValidator = new Validator(config);
    }

    var saveModuleEditValidation = function() {
        if(editModuleValidator.form()) {
            savEditModule();
        } else {
            console.log('验证失败');
        }
    }
    
    var savEditModule = function(e) {
        var handLoading = new Loading(loadingConfig);
        if(true) {
            var data = Form.serialize($('.detailModuleEditForm', $el));
            data.refProject = editModuleData.refProject;
            var config = null;
            // var orgId = addPositionData.orgId;
            // data.orgId = orgId;
            data.moduleName = data.moduleName.trim();
            data.excuter = excuterSelect.getSelected().key;
            data.userId = $cookie.get("userId");
            data.userName = data.comboInput;
            // Util.ajax.getJson("/it/token/getToken", {}, function(result, isok){
                // var token= result.bean;
                // console.log("################3"+token);
                // if(token){
                    // data.token = token;
                    Util.ajax.postJson(AjaxPath.project + "/modules/" + editModuleData.id, data, function(result, isok) {
                        handLoading.destroy();
                        if(result.returnCode==="0000") {
                            config = {
                                mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                                title:'提示',
                                width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                                height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                                cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                                modal:true,
                                content: '<div style="text-align:center;margin-top:50px">修改模块成功</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                            };
                            dialog = new Dialog(config);
                            dialog.on('onclose',function(){
                                back();
                            });
                        } else {
                            content = '修改模块失败';
                            if(result.returnMessage) {
                                content = result.returnMessage;
                            }
                            config = {
                                mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                                title:'提示',
                                width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                                height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                                cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                                modal:true,
                                content: '<div style="text-align:center;margin-top:50px">'+content+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                            };
                            dialog = new Dialog(config);
                            // dialog.on('onclose',function(){
                            //     back();
                            //     tabParent.destroy("修改模块");
                            // });
                        }
                    });
            //     }else{
            //         handLoading.destroy();
            //         config = {
            //             mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
            //             title:'提示',
            //             width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
            //             height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
            //             cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
            //             modal:true,
            //             content: '<div style="text-align:center;margin-top:50px">非法请求！</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
            //         };
            //         dialog = new Dialog(config);
            //     }
            // });
        }
    }

    var createLoading = function(){
        loadingConfig = {
            el:'body',                  //组件要绑定的容器，默认为body（此项可不配置或留空）
            className:'loading',           //组件外围的className
            position:'center',      //提示信息位置，顶部top|默认center中央
            width:'300',      //loading的宽度,非必须，默认300
            height:'auto',      //loading的宽度,非必须，默认auto
            mask:1,                 //是否显示遮罩， 0不显示|默认1显示
            animate:1,              //是否显示动画效果， 0不显示|默认1显示
            mode:'layer',     //展示方式 loadingLine线条方式|默认layer弹层方式
            text:'加载中...',       //提示文字，默认 加载中...
            icon:'dotCycle',  //文字前面的gif动画， 默认dotCycle有点组成的圈|cmcc移动图标|cmccLarge大的移动图标
        }
    };
    //活动日志列表
    var crtEdiModActlogList = function (){
        var config = {
            el: $('.editModuleLogTable', $el),
            ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置；慎用
                method:'GET'
            },
            field: {
                boxType: 'radio',
                key: 'id',
                items: [
                {
                    text: 'createrName',
                    name: 'createrName',
                    width: 100
                },
                {
                    text: '记录',
                    name: 'content',
                    width: 400,
                    className: 'text-break',
                    render: function (item, val) {
                        var str = "";
                        str += '<div class="fn-left">于&nbsp;&nbsp;' + new Date(item.createTime).Format('yyyy-MM-dd hh:mm:ss') + '&nbsp;&nbsp;' + item.typeName + '了&nbsp;&nbsp;' + item.businessType + '：' + '<a href="javascript:;" data="'+ item.businessId +'" class="">'+ item.businessTitle +'</a>' + item.content +'</div>';
                        return str;
                    }
                }]
            },
            page: {
                customPages: [2, 3, 5, 10, 15, 20, 30, 50], //可选择每页显示多少条
                perPage: 5, //默认每页显示多少条记录
                total: true
            },
            data: {
                // url: AjaxPath.project + "/projects"
                // url:"http://192.168.91.172:8089/devops-project/projects?httpToken=devopsuseracount"
                // url: AjaxPath.project + "/logInfo/query"
                url: AjaxPath.project+'/logInfo/query?businessId='+editModuleData.id+'&businessType=module'
                // url:"../../../data/list1.json"
            }
        };
        modEdiActiveLogList = new List(config);
        modEdiActiveLogList.search();
        $(".editModuleLogTable").find("a").removeClass("theSort");
        modEdiActiveLogList.on('success',function(result){
            $(".editModuleLogTable" ,$el).find(".sn-list-header").hide();
        });
    }
    //点击切换列表隐藏
    var changeTriEdiModule = function (){
        $(this).toggleClass('tri-left');
        $(this).parent('.t-list-title').siblings().stop().slideToggle();
    }
    //点击所有等激活样式时 刷新底部列表
    var actModEdiLogChange = function(){
        var data={};
        $(this).addClass('actived').siblings().removeClass('actived');
        data.type = $(this).attr("data");
        modEdiActiveLogList.search(data);
    }
    var createModMomeDialog = function(){
        require(['text!tpl/requirement/addMemo.tpl'], function(addMomo){
            var data = {};
            data.formClassName = "modMemoForm";
            data.textareaName = "content";
            var config = {
                mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                title: '添加备注', //对话框标题，
                content: Util.hdb.compile(addMomo)(data), //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                ok: function() {
                    console.log('点击了确定按钮');
                    if(editMdoMomeValidor.form()){
                        createReqMome(); 
                    }else {
                        console.log('验证失败');
                    }
                    return false;
                },
                cancel: function() {
                    return true;
                },
                cancelValue: '取消', //取消按钮的文本 默认是 ‘关闭’
                okValue: '确定', //取消按钮的文本 默认是 ‘关闭’
                cancelDisplay: true, //是否显示取消按钮 默认true显示|false不显示
                width: 600, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                height: 140, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                fixed: false, //是否开启固定定位 默认false不开启|true开启
                quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                beforeOpen: function() {
                    console.log('对话框打开时执行。');
                    // subTaskAssSelect();
                }, //对话框打开之前执行。
                escClose:true,//esc键快速关闭对话框，默认为true
                zIndex:990   // 对话框的z-index值，默认是1024。
            };
            dialog = new Dialog(config);
            creatEdiMdoMomeValidation();
        })
    }
    var creatEdiMdoMomeValidation = function() {
        var config = {
            // el: $('.validatorForm'),
            el: $(".modMemoForm"),
            // submitBtn: $(".btnSave"), //触发验证的按钮，可不配置
            dialog: true, //是否弹出验证结果对话框
            rules: {
                content: "required"
            },
            messages: {
                content: {
                    required: "备注不能为空！"
                }
            }    
        };  
        editMdoMomeValidor = new Validator(config);
    } 
    var createReqMome = function(){
        var config = null;
        var data = Form.serialize($('.modMemoForm'));
        data.businessId = editModuleData.id;
        data.businessType = 'module';
        data.businessTitle = $("<span/>").text( $("input[name='moduleName']", $el).val().trim() ).html();
        data.creater = $cookie.get('userId');
        Util.ajax.postJson(AjaxPath.project + '/logInfo/insert', JSON.stringify(data), function(result, isok){
            if(result.returnCode==="0000"){
                dialog.remove();
                modEdiActiveLogList.search();
                $('.editModuleLogTab li').eq(0).addClass('actived').siblings().removeClass('actived');
            }else {
                config = {
                    mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                    title:'提示',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                    modal:true,
                    content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                };
                dialog = new Dialog(config);
            }
        }, 'application/json')
    }
    return initialize;
});

